/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.servico;

import br.com.foxinline.modelo.Pessoa;
import br.com.foxinline.modelo.Portaria;
import br.com.foxinline.util.Caracter;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author laverson
 */
@Stateless
public class PortariaServico extends ServicoGenerico<Portaria> {

    @EJB
    PessoaServico clienteServico;
    @EJB
    UsuarioServico usuarioServico;

    public PortariaServico() {
        super(Portaria.class);
    }

    @Override
    public void salvar(Portaria entity) {
        entity.setDataCadastro(new Date());
        entity.setUsuario(usuarioServico.getCurrentUser());

        Pessoa pessoa = entity.getPessoa();

        if (pessoa != null && pessoa.getId() == null) {
            clienteServico.salvar(pessoa);
            entity.setPessoa(pessoa);
        }

        super.salvar(entity);
    }

    @Override
    public void atualizar(Portaria entity) {
        Pessoa pessoa = entity.getPessoa();

        if (pessoa != null && pessoa.getId() == null) {
            clienteServico.salvar(pessoa);
            entity.setPessoa(pessoa);
        }

        super.atualizar(entity);
    }

    public List<Portaria> pesquisar(Portaria portaria) {
        String sql = "Select p from Portaria p ";

        Pessoa pessoa = portaria.getPessoa();
        pessoa.setCpf(Caracter.removecaracter(pessoa.getCpf()));
        pessoa.setCnpj(Caracter.removecaracter(pessoa.getCnpj()));

        if ((pessoa.getNome() != null && !pessoa.getNome().equals(""))
                || (pessoa.getCpf() != null && !pessoa.getCpf().equals(""))
                || (pessoa.getRg() != null && !pessoa.getRg().equals(""))
                || (pessoa.getNomeFantasia() != null && !pessoa.getNomeFantasia().equals(""))
                || (pessoa.getCnpj() != null && !pessoa.getCnpj().equals(""))) {
            sql += " JOIN p.cliente c ";
        }

        sql += " where ";

        if (portaria.getTipoPortaria() != null) {
            sql += " p.tipoPortaria = :tipoPortaria AND ";
        }
        if (portaria.getDataPortaria() != null) {
            sql += " p.dataPortaria = :dataPortaria AND ";
        }

        if (pessoa.getNome() != null && !pessoa.getNome().equals("")) {
            pessoa.setNome(pessoa.getNome().replace(" ", "%"));
            sql += " lower(c.nome) LIKE lower(:nome) AND ";
        }
        if (pessoa.getCpf() != null && !pessoa.getCpf().equals("")) {
            sql += " lower(c.cpf) LIKE lower(:cpf) AND ";
        }
        if (pessoa.getRg() != null && !pessoa.getRg().equals("")) {
            sql += " lower(c.rg) LIKE lower(:rg) AND ";
        }
        if (pessoa.getNomeFantasia() != null && !pessoa.getNomeFantasia().equals("")) {
            pessoa.setNomeFantasia(pessoa.getNomeFantasia().replace(" ", "%"));
            sql += " lower(c.nomeFantasia) LIKE lower(:nomeFantasia) AND ";
        }
        if (pessoa.getCnpj() != null && !pessoa.getCnpj().equals("")) {
            sql += " lower(c.cnpj) LIKE lower(:cnpj) AND ";
        }
        sql += " 1=1 ";

        Query query = getEntityManager().createQuery(sql);

        if (portaria.getTipoPortaria() != null) {
            query.setParameter("tipoPortaria", portaria.getTipoPortaria());
        }
        if (portaria.getDataPortaria() != null) {
            query.setParameter("dataPortaria", portaria.getDataPortaria());
        }

        if (pessoa.getNome() != null && !pessoa.getNome().equals("")) {
            query.setParameter("nome", "%" + pessoa.getNome() + "%");
        }
        if (pessoa.getCpf() != null && !pessoa.getCpf().equals("")) {
            query.setParameter("cpf", pessoa.getCpf());
        }
        if (pessoa.getRg() != null && !pessoa.getRg().equals("")) {
            query.setParameter("rg", pessoa.getRg());
        }
        if (pessoa.getNomeFantasia() != null && !pessoa.getNomeFantasia().equals("")) {
            query.setParameter("nomeFantasia", "%" + pessoa.getNomeFantasia() + "%");
        }
        if (pessoa.getCnpj() != null && !pessoa.getCnpj().equals("")) {
            query.setParameter("cnpj", pessoa.getCnpj());
        }

        return query.getResultList();
    }
}